/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
package com.teradata.olingo.provider;

import com.teradata.olingo.service.EdmTypeTrnsfService;
import org.apache.olingo.commons.api.edm.FullQualifiedName;
import org.apache.olingo.commons.api.edm.provider.*;
import org.apache.olingo.commons.api.ex.ODataException;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.List;

import static com.teradata.olingo.constant.OdataConst.NAMESPACE;

public class GenericSchemaProvider {

  private GenericEntityTypeProvider genericEntityTypeProvider;
  private GenericContainerProvider genericContainerProvider;

  @Autowired
  EdmTypeTrnsfService edmTypeTrnsfService;

  public GenericSchemaProvider(GenericEntityTypeProvider genericEntityTypeProvider, GenericContainerProvider genericContainerProvider) {
    this.genericEntityTypeProvider = genericEntityTypeProvider;
    this.genericContainerProvider = genericContainerProvider;
  }


  public List<CsdlSchema> getSchemas() throws ODataException {
    // create Schema
    CsdlSchema schema = new CsdlSchema();
    schema.setNamespace(NAMESPACE);

    // add EntityTypes
    List<CsdlEntityType> entityTypes = new ArrayList<CsdlEntityType>();


    //for (String apiName : getMetadata().keySet()) {
    for (String apiName : edmTypeTrnsfService.getMetadataFromDB().keySet()) {
      entityTypes.add(genericEntityTypeProvider.getEntityType(new FullQualifiedName(NAMESPACE, apiName)));
    }
    schema.setEntityTypes(entityTypes);

    // add EntityContainer
    schema.setEntityContainer(genericContainerProvider.getEntityContainer());

    // finally
    List<CsdlSchema> schemas = new ArrayList<CsdlSchema>();
    schemas.add(schema);

    return schemas;
  }
}
